因為HTTP為無狀態的協定,Server和Client不會一直保持連線狀態,可以透過session來儲存資料,例如:一般來說購物車都會看到使用者加入的東西,這是因為session把資料儲存起來了,如果沒有session或是其他儲存機制,每次登入購物車就都會是空的資料或是無法儲存資料。
session在laravel是放在config/session.php這隻檔案中,而裡面有很多選項可供使用,一般情況下,laravel已經預設好了檔案的設定,配置了適用於大多數應用程序的file Session 驅動,在生產環境下,你可以考慮使用memcached或redis驅動來實現更出色的Session性能。
file-將Session保存在storage/framework/sessions中。
cookie - Session 保存在安全加密的Cookie 中。
database - Session 保存在關係型數據庫中。
memcached/ redis- Sessions保存在其中一個快速且基於緩存的存儲系統中。
array - Sessions 保存在PHP 數組中,不會被持久化。
Laravel中處理Session數據有兩種主要方法:全局輔助函數session和通過一個Request實例。
class UserController extends Controller
{
/**
* 展示给定用户的配置文件
*
* @param Request $request
* @param int $id
* @return Response
*/
public function show(Request $request, $id)
{
$value = $request->session()->get('key');
//
}
}
session獲取值得時候,還可以傳送一個get的方法,第二個參數為session未取得值,而返回的預設值,或是可以寫成閉包的方式,回傳值也可以
$value = $request->session()->get('key', 'default');
$value = $request->session()->get('key', function () {
return 'default';
});
也可以使用全域的PHP函數session來取得或是儲存資料,可以直接在session傳入key值,或是使用物件的方式儲存session。
Route::get('home', function () {
// 获取 Session 中的一条数据...
$value = session('key');
// 指定一个默认值...
$value = session('key', 'default');
// 在 Session 中存储一条数据...
session(['key' => 'value']);
});
可以使用all方法取得所有session數據
$data = $request->session()->all();
可以使用has來判斷值是否有資料,如果有值而且不為null就會是true
if ($request->session()->has('users')) {
//
}
// 通過 HTTP 請求實例...
$request->session()->put('key', 'value');
// 通過全域輔助函數
session(['key' => 'value']);
forget方法可以從Session內刪除一條數據。如果你想刪除Session內所有數據,可以使用flush方法:
$request->session()->forget('key');
$request->session()->flush();